package parser

import (
	"fmt"
)

// Parser 是主解析器结构体
type Parser struct {
	lexer *Lexer
}

// NewParser 创建一个新的解析器实例
func NewParser() *Parser {
	return &Parser{}
}

// ParseSQL 解析SQL字符串并返回AST
func (p *Parser) ParseSQL(sql string) (Statement, error) {
	// 创建词法分析器
	p.lexer = NewLexer(sql)
	
	// 执行解析
	result := yyParse(p.lexer)
	if result != 0 {
		return nil, fmt.Errorf("parse error")
	}
	
	// 返回解析结果
	return p.lexer.result, nil
}

// ParseSQLToAST 是一个便利函数，直接解析SQL并返回AST
func ParseSQLToAST(sql string) (Statement, error) {
	parser := NewParser()
	return parser.ParseSQL(sql)
}